package com.ljy.my_study.leetcode.两两交换链表中的节点;

import com.ljy.my_study.util.ListNodeUtil;
import com.ljy.my_study.util.ListNodeUtil.*;

/**
 * @author lijunying
 * @date 2020/7/28 11:55
 */
public class TestMain {

//    给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
//
//    你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
//
//             
//
//    示例:
//
//    给定 1->2->3->4, 你应该返回 2->1->4->3.

    public static void main(String[] args) {
        ListNode listNode=ListNodeUtil.createListNode(new int[]{1});
        System.out.println(new TestMain().swapPairs(listNode));
    }

//    public ListNode swapPairs(ListNode head) {
//        if(head==null||head.next==null){
//            return head;
//        }
//        ListNode first=head;
//        ListNode second=first.next;
//        if(second==null){
//            return head;
//        }
//        head=second;
//        ListNode lastNode=first;
//        while(first!=null){
//            ListNode nextFirst=second!=null?second.next:null;
//            first.next=nextFirst;
//            if(second!=null){
//                second.next=first;
//                lastNode.next=second;
//            }else{
//                lastNode.next=first;
//            }
//            lastNode=first;
//            first=nextFirst;
//            second=first!=null?first.next:null;
//        }
//        return head;
//    }

    public ListNode swapPairs(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode first=head;
        ListNode second=first.next;

        ListNode lastNode=null;
        ListNode nextFirst;
        head=second;
        do{
            if(second!=null){
                nextFirst=second.next;
                first.next=null;
                second.next=first;
                first.next=nextFirst;
                if(lastNode==null){
                    lastNode=first;
                }else{
                    lastNode.next=second;
                    lastNode=first;
                }
                if(nextFirst!=null){
                    first=nextFirst;
                    second=nextFirst.next;
                }
            }else{
                break;
            }
        }while(nextFirst!=null&&nextFirst.next!=null);
        return head;
    }

}
